package com.szsh.aiot.common.utils;

import java.util.Objects;
import java.util.concurrent.atomic.AtomicInteger;

public class SequenceNoUtil {

    private static String preDateStr = "";
    private static AtomicInteger atomicInteger;

    /**
     * 获取序列号
     * @return 序列号
     */
    public static synchronized String getSequenceNo() {
        // 获取 yyyyMMddHHmmss 格式后缀
        String dateStr = DateUtils.dateTimeNow();

        if (Objects.equals(dateStr, preDateStr)) {
            // 和上一个时间相同
            if (atomicInteger.get() > 9999) {
                //  重置 AtomicInteger
                atomicInteger = new AtomicInteger(1);
                // 重新获取时间
                while (Objects.equals(dateStr, preDateStr)) {
                    dateStr = DateUtils.dateTimeNow();
                }
            }
        } else {
            // 和上一个时间不同
            // 重置 AtomicInteger
            atomicInteger = new AtomicInteger(1);
        }
        // 设置上一个时间戳
        preDateStr = dateStr;

        return String.format("%s%04d", dateStr, atomicInteger.getAndIncrement());
    }
}
